package pe.gob.foncodes.ssa.bs.seguridad.domain;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.NotNull;
import pe.gob.foncodes.ssa.bs.common.domain.EntidadBase;
import pe.gob.foncodes.ssa.bs.common.util.Constante;

/**
 *
 * @author Gcarlos
 */
@Entity
@Table(name = "USUARIO_PERFIL", catalog = "", schema = "SSA")
@NamedQueries({
    @NamedQuery(name = "UsuarioPerfil.findAll", query = "SELECT u FROM UsuarioPerfil u"),
    @NamedQuery(name = "UsuarioPerfil.findByNidUsuarioAndFlgActivo", query = "SELECT u FROM UsuarioPerfil u JOIN u.nidPerfil p WHERE p.flgActivo = '1' AND u.nidUsuario.id = ?1 AND u.flgActivo = ?2"),
    @NamedQuery(name = "UsuarioPerfil.findByNidUsuario", query = "SELECT u FROM UsuarioPerfil u JOIN u.nidPerfil p JOIN p.nidModulo m WHERE p.flgActivo = '1' AND m.flgActivo = '1' AND u.nidUsuario.id = ?1 ORDER BY p.nidModulo.id"),
    @NamedQuery(name = "UsuarioPerfil.findByNidPerfil", query = "SELECT u FROM UsuarioPerfil u JOIN u.nidPerfil p WHERE p.id = ?1 "),
    @NamedQuery(name = "UsuarioPerfil.findByNidUsuarioAndNidPerfil", query = "SELECT u FROM UsuarioPerfil u WHERE u.nidUsuario.id = ?1 AND u.nidPerfil.id = ?2"),
    @NamedQuery(name = "UsuarioPerfil.findByFlgConsulta", query = "SELECT u FROM UsuarioPerfil u WHERE u.flgConsulta = :flgConsulta"),
    @NamedQuery(name = "UsuarioPerfil.findByFlgCaduca", query = "SELECT u FROM UsuarioPerfil u WHERE u.flgCaduca = :flgCaduca"),
    @NamedQuery(name = "UsuarioPerfil.findByCodUnidad", query = "SELECT u FROM UsuarioPerfil u WHERE u.codUnidad = :codUnidad"),
    @NamedQuery(name = "UsuarioPerfil.findByCodZonal", query = "SELECT u FROM UsuarioPerfil u WHERE u.codZonal = :codZonal"),
    @NamedQuery(name = "UsuarioPerfil.findByNidUsuarioUnidadTerritorialActivo", query = "SELECT u"
                                                                                    + " FROM UsuarioPerfil u"
                                                                                    + " WHERE u.nidUsuario = :nidUsuario"
                                                                                    + " AND u.codZonal = :codZonal"
                                                                                    + " AND u.flgActivo='"+Constante.ESTADO_ACTIVO+"'")
})
public class UsuarioPerfil extends EntidadBase implements Serializable {

    private static final long serialVersionUID = 1L;
    private String flgActivo;
    private String flgConsulta;
    private Date fecInicio;
    private Date fecFin;
    private String flgCaduca;
    private String codUnidad;
    private String codZonal;
    private List<HorarioPerfil> horarioPerfilList;
    private List<UsuarioAutorizacion> usuarioAutorizacionList;
    private Usuario nidUsuario;
    private Perfil nidPerfil;
    private String txtObservacion;
    private String flgHorarioRestringido;

    public UsuarioPerfil() {
    }

    @Id
    @Basic(optional = false)
    @NotNull
    @SequenceGenerator(schema="SSA", name="SQ_USUARIO_PERFIL",sequenceName="SSA.SQ_USUARIO_PERFIL", allocationSize=1)
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SQ_USUARIO_PERFIL")
    @Column(name = "NID_USUARIO_PERFIL", nullable = false, precision = 0, scale = -127)
    @Override
    public Long getId() {
        return super.getId();
    }
    
    @Column(name = "NID_CONTROL_ACCESO_WEB", precision = 0, scale = -127)
    @Override
    public Long getNIdCtrlAccesoWeb() {
        return super.getNIdCtrlAccesoWeb();
    }
    
    @Basic(optional = false)
    @NotNull
    @Column(name = "FLG_ACTIVO")
    public String getFlgActivo() {
        return flgActivo;
    }

    public void setFlgActivo(String flgActivo) {
        this.flgActivo = flgActivo;
    }

    @Basic(optional = false)
    @NotNull
    @Column(name = "FLG_CONSULTA")
    public String getFlgConsulta() {
        return flgConsulta;
    }

    public void setFlgConsulta(String flgConsulta) {
        this.flgConsulta = flgConsulta;
    }

    @Column(name = "FEC_INICIO")
    @Temporal(TemporalType.TIMESTAMP)
    public Date getFecInicio() {
        return fecInicio;
    }

    public void setFecInicio(Date fecInicio) {
        this.fecInicio = fecInicio;
    }

    @Column(name = "FEC_FIN")
    @Temporal(TemporalType.TIMESTAMP)
    public Date getFecFin() {
        return fecFin;
    }

    public void setFecFin(Date fecFin) {
        this.fecFin = fecFin;
    }

    @Basic(optional = false)
    @NotNull
    @Column(name = "FLG_CADUCA")
    public String getFlgCaduca() {
        return flgCaduca;
    }

    public void setFlgCaduca(String flgCaduca) {
        this.flgCaduca = flgCaduca;
    }

    @Column(name = "COD_UNIDAD", length = 10, nullable=true)
    public String getCodUnidad() {
        return codUnidad;
    }

    public void setCodUnidad(String codUnidad) {
        this.codUnidad = codUnidad;
    }

    @Basic(optional = false)
    @NotNull
    @Column(name = "COD_ZONAL", nullable = false, length = 2)
    public String getCodZonal() {
        return codZonal;
    }

    public void setCodZonal(String codZonal) {
        this.codZonal = codZonal;
    }

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "nidUsuarioPerfil")
    public List<HorarioPerfil> getHorarioPerfilList() {
        return horarioPerfilList;
    }

    public void setHorarioPerfilList(List<HorarioPerfil> horarioPerfilList) {
        this.horarioPerfilList = horarioPerfilList;
    }

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "usuarioPerfil")
    public List<UsuarioAutorizacion> getUsuarioAutorizacionList() {
        return usuarioAutorizacionList;
    }

    public void setUsuarioAutorizacionList(List<UsuarioAutorizacion> usuarioAutorizacionList) {
        this.usuarioAutorizacionList = usuarioAutorizacionList;
    }

    @JoinColumn(name = "NID_USUARIO", referencedColumnName = "NID_USUARIO", nullable = false)
    @ManyToOne(optional = false)
    public Usuario getNidUsuario() {
        return nidUsuario;
    }

    public void setNidUsuario(Usuario nidUsuario) {
        this.nidUsuario = nidUsuario;
    }

    @JoinColumn(name = "NID_PERFIL", referencedColumnName = "NID_PERFIL", nullable = false)
    @ManyToOne(optional = false)
    public Perfil getNidPerfil() {
        return nidPerfil;
    }

    public void setNidPerfil(Perfil nidPerfil) {
        this.nidPerfil = nidPerfil;
    }

    @Column(name = "TXT_OBSERVACION", length = 250)
    public String getTxtObservacion() {
        return txtObservacion;
    }

    public void setTxtObservacion(String txtObservacion) {
        this.txtObservacion = txtObservacion;
    }
    
    @Basic(optional = false)
    @NotNull
    @Column(name = "FLG_HORARIO_RESTRINGIDO", nullable = false)
    public String getFlgHorarioRestringido() {
        return flgHorarioRestringido;
    }

    public void setFlgHorarioRestringido(String flgHorarioRestringido) {
        this.flgHorarioRestringido = flgHorarioRestringido;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (getId() != null ? getId().hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof UsuarioPerfil)) {
            return false;
        }
        UsuarioPerfil other = (UsuarioPerfil) object;
        if ((this.getId() == null && other.getId() != null) || (this.getId() != null && !this.getId().equals(other.getId()))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "pe.gob.foncodes.ssa.bs.seguridad.domain.UsuarioPerfil[ nidUsuarioPerfil=" + getId() + " ]";
    }
}
